home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_100 / 196_01 / fp128.asm < prev    next >
Assembly Source File  |  1985-11-13  |  45KB  |  2,368 lines

  1.  
  2. TPALOC        EQU    0100H
  3.  
  4.  
  5.  
  6.  
  7.     page 76
  8.  
  9. CPM:    EQU 1
  10. MPM2:    EQU 0
  11.  
  12.     if not cpm
  13. CCCORG:    EQU WHATEVER
  14. RAM:    EQU WHATEVER2
  15. BASE:    EQU WHATEVER3
  16.     endif
  17.  
  18.  
  19.     if cpm
  20. base:    equ 0000h
  21. fcb:    equ base+5ch
  22. tbuff:    equ base+80h
  23. bdos:    equ base+5
  24. tpa:    equ base+100h
  25. nfcbs:    equ 9
  26. errorv:    equ 255
  27. cccorg:    equ tpa
  28.  
  29.  
  30. ram:    equ cccorg+52Bh
  31.     endif
  32.  
  33.  
  34. cr:    equ 0dh
  35. lf:    equ 0ah
  36. newlin:    equ lf
  37. tab:    equ 9
  38. bs:    equ 08h
  39. cntrlc:    equ 3
  40.  
  41.  
  42.  
  43. fexitv:    equ cccorg+09h
  44. error:    equ cccorg+1dh
  45. exit:    equ error+3
  46.  
  47.     if cpm
  48. close:    equ error+6
  49. setfcb:    equ error+9
  50. fgfd:    equ error+12
  51. fgfcb:    equ error+15
  52. setfcu:    equ error+18
  53. setusr:    equ error+21
  54. rstusr:    equ error+24
  55. khack:    equ error+33
  56. clrex:    equ error+36
  57.     endif
  58.  
  59.  
  60. eqwel:    equ cccorg+0e5h
  61.  
  62. smod:    equ cccorg+10fh
  63. usmod:    equ cccorg+129h
  64. smul:    equ cccorg+13fh
  65. usmul:    equ cccorg+16bh
  66. usdiv:    equ cccorg+189h
  67. sdiv:    equ cccorg+1cbh
  68.  
  69. cmphd:    equ cccorg+1ddh
  70. cmh:    equ cccorg+1fah
  71. cmd:    equ cccorg+202h
  72.  
  73. ma1toh:    equ cccorg+20ah
  74. ma2toh:    equ cccorg+213h
  75. ma3toh:    equ ma2toh+6
  76. ma4toh:    equ ma2toh+12
  77. ma5toh:    equ ma2toh+18
  78. ma6toh:    equ ma2toh+24
  79. ma7toh:    equ ma2toh+30
  80.  
  81. arghak:    equ ma2toh+36
  82.  
  83.  
  84.  
  85.     org ram
  86.  
  87.     ds 20
  88.  
  89. errnum:    ds 1
  90.  
  91. pbase:    ds 2
  92. ysize:    ds 2
  93. xsize:    ds 2
  94. psize:    ds 2
  95.  
  96. rseed:    ds 8
  97.  
  98. args:    ds 14
  99.  
  100. iohack:    ds 6
  101.  
  102. allocp: ds 2
  103. alocmx:    ds 2
  104.  
  105. room:    ds 30
  106.  
  107. uroom:    ds 20
  108.  
  109.  
  110.  
  111. extrns:    equ cccorg+15h
  112. cccsiz:    equ cccorg+17h
  113. codend:    equ cccorg+19h
  114. freram:    equ cccorg+1bh
  115.  
  116.  
  117. arg1:    equ args
  118. arg2:    equ args+2
  119. arg3:    equ args+4
  120. arg4:    equ args+6
  121. arg5:    equ args+8
  122. arg6:    equ args+10
  123. arg7:    equ args+12
  124.  
  125. tmp:    equ room
  126. tmp1:    equ room+1
  127. tmp2:    equ room+2
  128. tmp2a:    equ room+4
  129. ungetl:    equ room+6
  130. unused:    equ room+7
  131. curusr:    equ room+8
  132. usrnum:    equ room+9
  133.  
  134.  
  135.  
  136. mode:    equ room+10
  137. freeze:    equ room+11
  138. pending: equ room+12
  139. pendch:    equ room+13
  140. quitc:    equ room+14
  141.  
  142. echo:    equ 1
  143. quit:    equ 2
  144. flow:    equ 4
  145. strip:    equ 8
  146. expand:    equ 16
  147. swap:    equ 32
  148.  
  149.  
  150.  
  151.     if cpm
  152. conin:    equ 1
  153. conout:    equ 2
  154. lstout:    equ 5
  155. dconio:    equ 6
  156. pstrng:    equ 9
  157. getlin:    equ 10
  158. cstat:    equ 11
  159. select:    equ 14
  160. openc:    equ 15
  161. closec:    equ 16
  162. delc:    equ 19
  163. reads:    equ 20
  164. creatc:    equ 22
  165. renc:    equ 23
  166. sdma:    equ 26
  167. gsuser:    equ 32
  168. readr:    equ 33
  169. writr:    equ 34
  170. cfsizc:    equ 35
  171. srrecc:    equ 36
  172.     endif
  173.  
  174.  
  175. BIASEXP    EQU    0400H
  176. NBYTES    EQU    16
  177.  
  178.  
  179.  
  180.         ORG    TPALOC+200H
  181.         DB    0,0,0,0,0
  182. FP128$BEG    EQU    $-TPALOC
  183.         DB    0
  184.         DW    FP128$END-$-2
  185. FP128$STRT    EQU    $
  186. FP128$EF$FP128    EQU    FP128$STRT
  187.  
  188. FP128$STRTC    EQU    $
  189.     call    arghak
  190.     push    b
  191.     lda    arg1
  192.     ora    a
  193. FP128$R000    EQU    $+1-FP128$STRT
  194.     jz    FP128$L$FPTEST
  195.     cpi    11
  196. FP128$R001    EQU    $+1-FP128$STRT
  197.     jz    FP128$L$FPIN
  198.     cpi    255
  199. FP128$R002    EQU    $+1-FP128$STRT
  200.     jz    FP128$L$FPTST2
  201.     lhld    arg2
  202.     xchg
  203. FP128$R003    EQU    $+1-FP128$STRT
  204.     lxi    h,FP128$L$AREG
  205. FP128$R004    EQU    $+1-FP128$STRT
  206.     call    FP128$L$UNPACK
  207.     lda    arg1
  208.     cpi    10
  209. FP128$R005    EQU    $+1-FP128$STRT
  210.     jz    FP128$L$FPCONV
  211.     lhld    arg3
  212.     xchg
  213. FP128$R006    EQU    $+1-FP128$STRT
  214.     lxi    h,FP128$L$BREG
  215. FP128$R007    EQU    $+1-FP128$STRT
  216.     call    FP128$L$UNPACK
  217. FP128$R008    EQU    $+1-FP128$STRT
  218.     lxi    h,FP128$L$EXITP
  219.     push    h
  220.     lda    arg1
  221.     cpi    1
  222. FP128$R009    EQU    $+1-FP128$STRT
  223.     jz    FP128$L$FPMUL0
  224.     cpi    2
  225. FP128$R010    EQU    $+1-FP128$STRT
  226.     jz    FP128$L$FPDIV0
  227.     cpi    3
  228. FP128$R011    EQU    $+1-FP128$STRT
  229.     jz    FP128$L$FPADD0
  230.     cpi    4
  231. FP128$R012    EQU    $+1-FP128$STRT
  232.     jz    FP128$L$FPSUB0
  233.     pop    h
  234.     pop    b
  235.     lxi    h,0
  236.     ret
  237.  
  238. FP128$L$EXITP        EQU    $-FP128$STRT
  239.           lhld    arg4
  240.     xchg
  241. FP128$R013    EQU    $+1-FP128$STRT
  242.     call    FP128$L$PACK
  243. FP128$R014    EQU    $+1-FP128$STRT
  244.     lxi    h,FP128$L$OVF
  245.     xra    a
  246.     ora    m
  247.     inx    h
  248.     ora    m
  249.     inx    h
  250.     ora    m
  251.     inx    h
  252.     ora    m
  253.     mov    l,a
  254.     mvi    h,0
  255.     pop    b
  256.     ret
  257.  
  258.  
  259.  
  260. FP128$L$FPDIV0        EQU    $-FP128$STRT
  261.            lxi    h,0
  262. FP128$R015    EQU    $+1-FP128$STRT
  263.     shld    FP128$L$OVF
  264. FP128$R016    EQU    $+1-FP128$STRT
  265.     shld    FP128$L$ZERO
  266. FP128$R017    EQU    $+1-FP128$STRT
  267.     lhld    FP128$L$BEXP
  268.     mov    a,h
  269.     ora    l
  270. FP128$R018    EQU    $+1-FP128$STRT
  271.     jz    FP128$L$OVRFW
  272. FP128$R019    EQU    $+1-FP128$STRT
  273.     lhld    FP128$L$AEXP
  274.     mov    a,h
  275.     ora    l
  276. FP128$R020    EQU    $+1-FP128$STRT
  277.     jz    FP128$L$SETZERO
  278.  
  279. FP128$L$FDIV1        EQU    $-FP128$STRT
  280.           lxi    h,0
  281. FP128$R021    EQU    $+1-FP128$STRT
  282.     shld    FP128$L$LA
  283. FP128$R022    EQU    $+1-FP128$STRT
  284.     shld    FP128$L$LA+2
  285. FP128$R023    EQU    $+1-FP128$STRT
  286.     shld    FP128$L$LA+4
  287. FP128$R024    EQU    $+1-FP128$STRT
  288.     shld    FP128$L$LA+6
  289. FP128$R025    EQU    $+1-FP128$STRT
  290.     lxi    h,FP128$L$LA+NBYTES+NBYTES-1
  291.     mvi    b,NBYTES+1
  292.     xra    a
  293. FP128$R026    EQU    $+1-FP128$STRT
  294.     call    FP128$L$SFTR0
  295. FP128$R027    EQU    $+1-FP128$STRT
  296.     lxi    h,FP128$L$BREG+NBYTES-1
  297.     xra    a
  298. FP128$R028    EQU    $+1-FP128$STRT
  299.     call    FP128$L$SFTR
  300. FP128$R029    EQU    $+1-FP128$STRT
  301.     lhld    FP128$L$BEXP
  302.     inx    h
  303. FP128$R030    EQU    $+1-FP128$STRT
  304.     shld    FP128$L$BEXP
  305.     mvi    b,NBYTES*8
  306. FP128$L$FDIV2        EQU    $-FP128$STRT
  307.           push    b
  308. FP128$R031    EQU    $+1-FP128$STRT
  309.     lxi    d,FP128$L$AREG+NBYTES-1
  310. FP128$R032    EQU    $+1-FP128$STRT
  311.     lxi    h,FP128$L$BREG+NBYTES-1
  312. FP128$R033    EQU    $+1-FP128$STRT
  313.     call    FP128$L$ICMP
  314. FP128$R034    EQU    $+1-FP128$STRT
  315.     jc    FP128$L$FDIV3
  316. FP128$R035    EQU    $+1-FP128$STRT
  317.     lxi    d,FP128$L$AREG
  318. FP128$R036    EQU    $+1-FP128$STRT
  319.     lxi    h,FP128$L$BREG
  320. FP128$R037    EQU    $+1-FP128$STRT
  321.     call    FP128$L$ISUB
  322.     xra    a
  323. FP128$L$FDIV3        EQU    $-FP128$STRT
  324.           cmc
  325. FP128$R038    EQU    $+1-FP128$STRT
  326.     lxi    h,FP128$L$LA
  327. FP128$R039    EQU    $+1-FP128$STRT
  328.     call    FP128$L$SFTL
  329. FP128$R040    EQU    $+1-FP128$STRT
  330.     call    FP128$L$SFTL
  331.     pop    b
  332.  
  333.     db    010h,0dch
  334.  
  335. FP128$R041    EQU    $+1-FP128$STRT
  336.     lxi    h,FP128$L$LA
  337. FP128$R042    EQU    $+1-FP128$STRT
  338.     lxi    d,FP128$L$AREG
  339.     lxi    b,NBYTES
  340.     ldir
  341. FP128$R043    EQU    $+1-FP128$STRT
  342.     lhld    FP128$L$AEXP
  343.     lxi    d,BIASEXP+2
  344.     dad    d
  345.     xchg
  346. FP128$R044    EQU    $+1-FP128$STRT
  347.     lhld    FP128$L$BEXP
  348.     xchg
  349. FP128$R045    EQU    $+1-FP128$STRT
  350.     jmp    FP128$L$EXPNRM
  351.  
  352.  
  353.  
  354.  
  355. FP128$L$FPMUL0        EQU    $-FP128$STRT
  356.            lxi    h,0
  357. FP128$R046    EQU    $+1-FP128$STRT
  358.     shld    FP128$L$OVF
  359. FP128$R047    EQU    $+1-FP128$STRT
  360.     shld    FP128$L$ZERO
  361. FP128$R048    EQU    $+1-FP128$STRT
  362.     lhld    FP128$L$BEXP
  363.     mov    a,h
  364.     ora    l
  365. FP128$R049    EQU    $+1-FP128$STRT
  366.     jz    FP128$L$SETZERO
  367. FP128$R050    EQU    $+1-FP128$STRT
  368.     lhld    FP128$L$AEXP
  369.     mov    a,h
  370.     ora    l
  371. FP128$R051    EQU    $+1-FP128$STRT
  372.     jz    FP128$L$SETZERO
  373.  
  374. FP128$L$FMUL3        EQU    $-FP128$STRT
  375. FP128$R052    EQU    $+1-FP128$STRT
  376.           lxi    h,FP128$L$AREG
  377. FP128$R053    EQU    $+1-FP128$STRT
  378.     lxi    d,FP128$L$LA
  379.     lxi    b,nbytes
  380.     ldir
  381.  
  382. FP128$R054    EQU    $+1-FP128$STRT
  383.     lxi    h,FP128$L$BREG
  384. FP128$R055    EQU    $+1-FP128$STRT
  385.     call    FP128$L$IMUL
  386.  
  387. FP128$R056    EQU    $+1-FP128$STRT
  388.     lhld    FP128$L$AEXP
  389.     xchg
  390. FP128$R057    EQU    $+1-FP128$STRT
  391.     lhld    FP128$L$BEXP
  392.     dad    d
  393.     lxi    d,BIASEXP
  394.  
  395. FP128$L$EXPNRM        EQU    $-FP128$STRT
  396.            ora    a
  397.     dsbc    d
  398. FP128$R058    EQU    $+1-FP128$STRT
  399.     shld    FP128$L$AEXP
  400. FP128$R059    EQU    $+1-FP128$STRT
  401.     jc    FP128$L$UNDRFW
  402.     mov    a,h
  403.     cpi    BIASEXP/128
  404. FP128$R060    EQU    $+1-FP128$STRT
  405.     jnc    FP128$L$OVRFW
  406. FP128$R061    EQU    $+1-FP128$STRT
  407.     lda    FP128$L$ASIGN
  408. FP128$R062    EQU    $+1-FP128$STRT
  409.     lxi    h,FP128$L$BSIGN
  410.     xra    m
  411. FP128$R063    EQU    $+1-FP128$STRT
  412.     sta    FP128$L$ASIGN
  413. FP128$R064    EQU    $+1-FP128$STRT
  414.     jmp    FP128$L$FPNORM
  415.  
  416.  
  417.  
  418. FP128$L$FPSUB0        EQU    $-FP128$STRT
  419. FP128$R065    EQU    $+1-FP128$STRT
  420.            lda    FP128$L$BSIGN
  421.     xri    080h
  422. FP128$R066    EQU    $+1-FP128$STRT
  423.     sta    FP128$L$BSIGN
  424.  
  425. FP128$L$FPADD0        EQU    $-FP128$STRT
  426.            lxi    h,0
  427. FP128$R067    EQU    $+1-FP128$STRT
  428.     shld    FP128$L$OVF
  429. FP128$R068    EQU    $+1-FP128$STRT
  430.     shld    FP128$L$ZERO
  431. FP128$R069    EQU    $+1-FP128$STRT
  432.     lhld    FP128$L$AEXP
  433.     mov    a,h
  434.     ora    l
  435.     xchg
  436. FP128$R070    EQU    $+1-FP128$STRT
  437.     jnz    FP128$L$FADD1
  438. FP128$R071    EQU    $+1-FP128$STRT
  439.     lxi    h,FP128$L$BREG
  440. FP128$R072    EQU    $+1-FP128$STRT
  441.     lxi    d,FP128$L$AREG
  442.     lxi    b,NBYTES+3
  443.     ldir
  444. FP128$R073    EQU    $+1-FP128$STRT
  445.     jmp    FP128$L$FPNORM
  446. FP128$L$FADD1        EQU    $-FP128$STRT
  447. FP128$R074    EQU    $+1-FP128$STRT
  448.           lhld    FP128$L$BEXP
  449.     mov    a,h
  450.     ora    l
  451. FP128$R075    EQU    $+1-FP128$STRT
  452.     jz    FP128$L$FPNORM
  453.     xchg
  454.     dsbc    d
  455. FP128$R076    EQU    $+1-FP128$STRT
  456.     jz    FP128$L$FADD4
  457. FP128$R077    EQU    $+1-FP128$STRT
  458.     jnc    FP128$L$FADD2
  459.  
  460. FP128$R078    EQU    $+1-FP128$STRT
  461.     lda    FP128$L$ASIGN
  462.     mov    c,a
  463. FP128$R079    EQU    $+1-FP128$STRT
  464.     lda    FP128$L$BSIGN
  465. FP128$R080    EQU    $+1-FP128$STRT
  466.     sta    FP128$L$ASIGN
  467.     mov    a,c
  468. FP128$R081    EQU    $+1-FP128$STRT
  469.     sta    FP128$L$BSIGN
  470. FP128$R082    EQU    $+1-FP128$STRT
  471.     lxi    h,FP128$L$AREG
  472. FP128$R083    EQU    $+1-FP128$STRT
  473.     lxi    d,FP128$L$BREG
  474.     mvi    b,nbytes+2
  475. FP128$R084    EQU    $+1-FP128$STRT
  476.     call    FP128$L$SWAP0
  477.  
  478. FP128$R085    EQU    $+1-FP128$STRT
  479.     s